Installatie Kopano Community met behulp van Ansible

Vanaf 1 januari 2021 ga ik aan de slag bij een nieuw bedrijf, genaamd Smoose als Open Source Engineer. Na meer dat 20 jaar in het onderwijs als systeem-/netwerkbeheerder te hebben gewerkt, heb ik besloten om nu eens mijn kennis van automation en open source meer in de praktijk te kunnen gaan brengen.
Een van de pakketten waar Smoose ook mee bezig is, is Kopano. Een groupware suite welke van origine uit de Zarafa stal komt.
Nu wordt er in de Open Source wereld ook veel gebruik gemaakt van FreeIPA als Identity Management systeem en daar wilde ik dus aan kunnen koppelen. De installatie van FreeIPA heb ik nog niet beschreven op mijn website, maar misschien doe ik dat in de toekomst nog. Voor dit project maak ik gebruik van Ubuntu 20.04. Dus de YAML file is daar ook op gebaseerd. Hoewel de eerste check die ik doe de controle is of de host wel Ubuntu draait. Ik zou de yaml file dus makkelijk kunnen uitbreiden om het te laten werken met CentOS.

De yaml file ziet er als volgt uit:

- hosts: kopano
  gather_facts: yes
  become: yes
  vars:
    mysql_root_password: "password"
    kopano_mysql_user: "kopano"
    kopano_mysql_password: "kopanopassword"
    kopano_core_file: "core-10.0.6.502.1b60234-Ubuntu_20.04-amd64.tar.gz"
    kopano_webapp_file: "webapp-5.0.0.28%2B1913.83ea1a8-Ubuntu_20.04-all.tar.gz"
    ldap_uri : 'ldap://freeipa:389'
    ldap_sbase : 'cn=users,cn=accounts,dc=local,dc=freeipa,dc=net'
    ldap_admin: ''
    ldap_passwd: ''
  tasks:
  - name: Install on Ubuntu
    block:
      - name: Update and install packages
        apt:
          name: ['vim','git','mariadb-common','mariadb-server','python3-pymysql','apache2','libapache2-mod-php']
          update_cache: yes
          force_apt_get: yes
          state: latest
      - name: Create Database
        mysql_db:
          name: kopano
          state: present
          login_user: root
          login_password: ""
          login_unix_socket: /var/run/mysqld/mysqld.sock
      - mysql_user:
          login_user: root
          login_password: ""
          login_unix_socket: /var/run/mysqld/mysqld.sock
          user: "{{ kopano_mysql_user }}" 
          check_implicit_admin: true
          password: "{{ kopano_mysql_password }}"
          host: localhost
          priv: "kopano.*:ALL,GRANT"
          append_privs: yes
      - name: Download and extract Kopano community files
        file:
          path: /home/kopano/amd64
          state: directory
      - unarchive:
          src: "https://download.kopano.io/community/core%3A/{{ kopano_core_file }}"
          dest: /home/kopano/amd64
          remote_src: yes
      - unarchive:
          src: "https://download.kopano.io/community/webapp%3A/{{ kopano_webapp_file }}"
          dest: /home/kopano/amd64
          remote_src: yes
      - shell: apt-ftparchive packages amd64/ > amd64/Packages
        args:
          chdir: /home/kopano/
      - lineinfile:
         path: /etc/apt/sources.list.d/kopano-com.list
         line: 'deb [trusted=yes] file:/home/kopano amd64/'
         create: yes
         state: present
      - apt:
          name: ['kopano-server-packages','kopano-webapp']
          update_cache: yes
          force_apt_get: yes
      - replace:
          path: /etc/kopano/webapp/config.php
          regexp: '^(.*)SECURE_COOKIES(.*)$'
          replace: "define(\"SECURE_COOKIES\", false);"
      - replace:
          path: /etc/kopano/server.cfg
          regexp: '^(.*)mysql_user(.*)$'
          replace: "mysql_user = {{ kopano_mysql_user }}"
      - replace:
          path: /etc/kopano/server.cfg
          regexp: '^(.*)mysql_password(.*)$'
          replace: "mysql_password = {{ kopano_mysql_password }}"
      - replace:
          path: /etc/kopano/server.cfg
          regexp: '^(.*)user_plugin (.*)$'
          replace: "user_plugin = ldap"
      - replace:
          path: /etc/kopano/server.cfg
          regexp: '^(.*)user_plugin_config(.*)$'
          replace: "user_plugin_config = /etc/kopano/ldap.cfg"
      - template:
          src: ldap.cfg.j2
          dest: /etc/kopano/ldap.cfg
          backup: yes
      - service:
          name: kopano-server
          state: restarted
      - service:
          name: apache2
          state: restarted
    when: ansible_facts['os_family'] == "Debian"

We beginnen met het toevoegen van de host en de variabelen.
Belangrijk is de kopano_core_file en de kopano_webapp_file. Deze verwijzen naar de bestandsnaam op: https://download.kopano.io/community/core%3A/ en https://download.kopano.io/community/webapp%3A/ Hier kun je de bestandsnaam vinden. Je hebt zo dus de laatste installatie van de Kopano core en de Kopano webapp.
Ook moet de ldap_sbase worden aangepast aan de tree zoals die in je FreeIPA bestaat. Waarschijnlijk is dat vooral een aanpassing van de dc “stukjes”.
Vervolgens wordt gecontroleerd of je op Ubuntu gaat installeren.
Daarna installeren we een aantal dependencies om alles goed te kunnen installeren.
De rest van de yaml file zou duidelijk moeten zijn. Tijdens deze installatie maken we gebruik van een jinja2 template, voor de configuratie. Deze ziet er als volgt uit:

!include /usr/share/kopano/ldap.openldap.cfg

ldap_uri = {{ ldap_uri }}
ldap_bind_user = {{ ldap_admin }}
ldap_bind_passwd = {{ ldap_passwd }}
ldap_search_base = {{ ldap_sbase }}

De standaard ldap.cfg file is wat uitgebreider, maar dit is de basis om het te kunnen laten werken. Als je het script dan uitgaat voeren ziet het er als volgt uit:

Na deze installatie heb je dus een Kopano webapp omgeving op http://kopano.ip.address/webapp. Het is nog niet klaar voor productie. Kopano haalt namelijk nog niet het mailadres uit FreeIPA, maar inloggen lukt wel. Ook gaat dit nog niet over een secure https verbinding. Het begin is echter gemaakt.